<?php

namespace App\Http\Utils\OAuth1;

/**
 * 饭否操作类
 *
 * @package Wang Haosen
 * @author Wang Haosen
 * @version 1.0
 * @writen at July 6, 2011
 *
 *          @说明 这个文件是为饭否写的一个PHP SDK
 *          @希望能给后来开发的人带来方便 ^_^
 *
 *          @注意，这个文件使用时必须先引用同文件夹下的oauth.php 和 config.php
 * @PS:没事来http://pagewant.com坐一坐~
 */
class FFClient
{
    /**
     * 构造函数
     *
     * @param mixed $akey
     *            饭否给你的 APP KEY (Consumer_Key )
     * @param mixed $skey
     *            饭否给你的 APP SECRET (Consumer_Secret_Key )
     * @param mixed $accecss_token
     *            OAuth认证返回的token
     * @param mixed $accecss_token_secret
     *            OAuth认证返回的token secret
     */
    function __construct($akey, $skey, $accecss_token, $accecss_token_secret)
    {
        $this->oauth = new OAuth ($akey, $skey, $accecss_token, $accecss_token_secret);
    }

    // ////////////////////////////////////////消息相关////////////////////////////////////////////////////

    /**
     * 显示随便看看的消息
     * count是信息条数
     */
    function public_timeline($count = 20)
    {
        return $this->oauth->get('http://api.fanfou.com/statuses/public_timeline.json?count=' . $count);
    }

    /**
     * 显示来自用户和好友的消息
     * page 是页数，以下都是，不再说明
     */
    function friends_timeline($page = 1, $count = 20)
    {
        return $this->request_with_pager('http://api.fanfou.com/statuses/friends_timeline.json', $page, $count);
    }

    /**
     *
     * @ignore
     *
     */
    protected function request_with_pager($url, $page = false, $count = false)
    {
        $param = array();
        if ($page)
            $param ['page'] = $page;
        if ($count)
            $param ['count'] = $count;

        return $this->oauth->get($url, $param);
    }

    /**
     * 显示用户的消息
     */
    function user_timeline($page = 1, $count = 20)
    {
        return $this->request_with_pager('http://api.fanfou.com/statuses/user_timeline.json', $page, $count);
    }

    /**
     * 显示指定消息 通过消息ID
     */
    function show($stauts_id)
    {
        return $this->oauth->get('http://api.fanfou.com/statuses/show/' . $stauts_id . '.json');
    }

    /**
     * 显示发给当前用户的消息
     */
    function replies($page = 1, $count = 20)
    {
        return $this->request_with_pager('http://api.fanfou.com/statuses/replies.json', $page, $count);
    }

    /**
     * 最新 @用户的
     *
     * @param int $page
     *            返回结果的页序号。
     * @param int $count
     *            每次返回的最大记录数（即页面大小），不大于200，默认为20。
     * @return array
     */
    function mentions($page = 1, $count = 20)
    {
        return $this->request_with_pager('http://api.fanfou.com/statuses/mentions.json', $page, $count);
    }

    /**
     * 发表微博
     *
     * @access public
     * @param mixed $text
     *            要更新的微博信息。
     * @return array
     */
    function update($text)
    {
        $param = array();
        $param ['status'] = $text;
        // $param['source'] = $source;
        // $param['location'] = $location;
        return $this->oauth->post('http://api.fanfou.com/statuses/update.json', $param);
    }

    /**
     * 发表图片微博
     *
     * @param string $text
     *            要更新的微博信息。
     * @param string $pic_path
     *            要发布的图片路径,支持url。[只支持png/jpg/gif三种格式,增加格式请修改get_image_mime方法]
     * @return array
     */
    function upload($text, $pic_path)
    {
        $param = array();
        $param ['status'] = $text;
        $param ['pic'] = '@' . $pic_path;

        return $this->oauth->post('http://api.fanfou.com/photos/upload.json', $param, true);
    }

    /**
     * 转发微博
     *
     * @param mixed $text
     *            要更新的微博信息。
     * @return array
     */
    function repost($text, $repost_status_id)
    {
        $param = array();
        $param ['status'] = $text;
        $param ['repost_status_id'] = $repost_status_id;
        return $this->oauth->post('http://api.fanfou.com/statuses/update.json', $param);
    }

    // ////////////////////////////////////用户相关////////////////////////////////////////////

    /**
     * 删除微博
     *
     * @param mixed $sid
     *            要删除的微博ID
     */
    function destroy($sid)
    {
        return $this->oauth->post('http://api.fanfou.com/statuses/destroy/' . $sid . '.json');
    }

    /**
     * 个人资料
     *
     * @param mixed $uid用户UI
     */
    function show_user($uid = false)
    {
        $p = array();
        if ($uid) {
            $p ['id'] = $uid;
        }
        return $this->oauth->get('http://api.fanfou.com/users/show.json', $p);
    }

    /**
     * 通过ID得到用户的好友列表
     */
    function friends($page = 1, $id)
    {
        $p = array(
            'id' => $id,
            'page' => $page
        );
        return $this->oauth->get('http://api.fanfou.com/users/friends.json', $p);
    }

    /**
     * 通过ID得到用户的粉丝列表
     */
    function followers($page, $id)
    {
        $p = array(
            'id' => $id,
            'page' => $page
        );
        return $this->request_with_uid('http://api.fanfou.com/users/followers.json', $p);
    }

    /**
     *
     * @ignore
     *
     */
    protected function request_with_uid($url, $uid_or_name, $page = false, $count = false, $cursor = false, $post = false)
    {
        $param = array();
        if ($page)
            $param ['page'] = $page;
        if ($count)
            $param ['count'] = $count;
        if ($cursor)
            $param ['cursor'] = $cursor;

        if ($post)
            $method = 'post';
        else
            $method = 'get';

        if (is_numeric($uid_or_name)) {
            $param ['user_id'] = $uid_or_name;
            return $this->oauth->$method ($url, $param);
        } elseif ($uid_or_name !== null) {
            $param ['screen_name'] = $uid_or_name;
            return $this->oauth->$method ($url, $param);
        } else {
            return $this->oauth->$method ($url, $param);
        }
    }

    /**
     * 关注一个用户
     */
    function follow($uid)
    {
        return $this->oauth->post('http://api.fanfou.com/friendships/create/' . $uid . '.json');
    }

    /**
     * 取消关注某用户
     */
    function unfollow($uid)
    {
        return $this->oauth->post('http://api.fanfou.com/friendships/destroy/' . $uid . '.json');
    }

    /**
     * 判断好友关系是否存在
     */
    function is_followed($uid_a, $uid_b)
    {
        $param = array(
            'user_a' => $uid_a,
            'user_b' => $uid_b
        );
        return $this->oauth->get('http://api.fanfou.com/friendships/exists.json', $param);
    }

    /**
     * 获取私信列表
     *
     * @param int $page
     *            页码
     * @param int $count
     *            每次返回的最大记录数，最多返回200条，默认20。
     * @return array
     */
    function list_dm($page = 1, $count = 20)
    {
        return $this->request_with_pager('http://api.fanfou.com/direct_messages.json', $page, $count);
    }

    /**
     * 发送的私信列表
     *
     * @param int $page
     *            页码
     * @param int $count
     *            每次返回的最大记录数，最多返回200条，默认20。
     * @return array
     */
    function list_dm_sent($page = 1, $count = 20)
    {
        return $this->request_with_pager('http://api.fanfou.com/direct_messages/sent.json', $page, $count);
    }

    /**
     * 发送私信
     *
     * @param mixed $uid_or_name
     *            UID或微博昵称
     * @param mixed $text
     *            要发生的消息内容，文本大小必须小于300个汉字。
     * @return array
     */
    function send_dm($uid, $text)
    {
        $param = array();
        $param ['text'] = $text;
        $param ['user'] = $uid;
        return $this->oauth->post('http://api.fanfou.com/direct_messages/new.json', $param);
    }

    /**
     * 删除一条私信
     *
     * @param mixed $did
     *            要删除的私信主键ID
     * @return array
     */
    function delete_dm($did)
    {
        return $this->oauth->post('http://api.fanfou.com/direct_messages/destroy/' . $did . '.json');
    }

    /**
     * 返回用户的发布的最近20条收藏信息，和用户收藏页面返回内容是一致的。
     *
     * @param bool $page
     *            返回结果的页序号。
     * @return array
     */
    function get_favorites($page = 1, $count = 20)
    {
        $param = array();
        if ($page)
            $param ['page'] = $page;
        if ($count)
            $param ['count'] = $count;

        return $this->oauth->get(' http://api.fanfou.com/favorites.json', $param);
    }

    /**
     * 收藏一条微博信息
     *
     * @param mixed $sid
     *            收藏的微博id
     * @return array
     */
    function add_to_favorites($sid)
    {
        $param = array();
        $param ['id'] = $sid;

        return $this->oauth->post('http://api.fanfou.com/favorites/create/' . $sid . '.json');
    }

    // =========================================

    /**
     * 删除微博收藏。
     *
     * @param mixed $sid
     *            要删除的收藏微博信息ID.
     * @return array
     */
    function remove_from_favorites($sid)
    {
        return $this->oauth->post('http://api.fanfou.com/favorites/destroy/' . $sid . '.json');
    }

    function verify_credentials()
    {
        return $this->oauth->get('http://api.fanfou.com/account/verify_credentials.json');
    }
}

?>